//
//  UIButton+ZXHelper.h
//  MusiceFate
//
//  Created by simon on 13/3/21.
//  Copyright © 2013年 yinyuetai.com. All rights reserved.
//
//  简介：
/**
UIButton的image和title调整。默认情况下，imageEdgeInsets和titleEdgeInsets都是UIEdgeInsetsZero
，且imageView和titleLable之间没有间距。以宽度为例，
 
(1)if (button.width小于imageView上image的width){图像会被压缩，文字不显示}
(2)if (button.width < imageView.width + label.width){图像正常显示，文字显示不全}
(3)if (button.width >＝ imageView.width + label.width){图像和文字都居中显示，imageView在左，label在右，没有间距}
*/
// 注意：zx_centerXRightImageAndLeftTitleWithSpace 方法在不设置宽度约束的时候还有问题；

// 2019.11.26  增加图片在右标题在左的布局改变方法；
// 2019.12.09  修改bug；
// 2020.2.02  优化；
// 2020.2.24  修改CAIButtonImagePlacementRight类型的方法；
// 2020.2.28  再次优化CAIButtonImagePlacementRight类型的方法；
// 2020.4.28 优化zx_centerVerticalImageAndTitleWithSpace 上下居中的方法；
// 2020.12.05 去除耦合性
// 2021.09.13 修改zx_setTowOfLinesStringWithLineSpace的空判断bug；
// 2022.09.29 重构方法

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN


typedef NS_ENUM(NSInteger, CAIButtonImagePlacement) {
    ///图片在左，标题在右，默认风格
    CAIButtonImagePlacementLeft = 0,
    ///图片在右，标题在左
    CAIButtonImagePlacementRight = 1,
    ///图片在上，标题在下
    CAIButtonImagePlacementTop = 2,
};


@interface UIButton (ZXHelper)

/**
 *  设置间距,弃用
 *  注意：1.该方法需在设置图片和标题之后才调用;
         2.图片和标题改变后需再次调用以重新计算titleEdgeInsets和imageEdgeInsets；
 *  @param type    图片位置类型
 *  @param spacing 图片和标题之间的间隙,默认是0个间距。
 */
- (void)zx_setImagePositionWithType:(CAIButtonImagePlacement)type spacing:(CGFloat)spacing API_DEPRECATED("-zx_setImagePositionWithTypeV2:spacing: instead.", ios(2.0, 15.0));


/**
 *  设置间距，button设置必须得用attributedString属性设置；要设置自带兼容iOS15以上按钮的最小宽度；
 *  注意：1.该方法需在设置图片和标题之后才调用;
         2.图片和标题改变后需再次调用以重新计算titleEdgeInsets和imageEdgeInsets；
 *        iOS15以上：有系统自带的「宽度/高度+内置inset」的默认大小，宽度还是最小宽度，要设置也必须比它大才行，是无法设置到内容width的,不然title会换行；
 *        iOS15以下：
 *        如果上下居中：不设置宽度的情况，调整后的宽度/高度是之前的真实内容宽度/高度，所以需要自己设置宽度/高度约束布局；
 *        如果左右居中：
 *
 *  @param type    图片位置类型
 *  @param spacing 图片和标题之间的间隙,默认是0个间距。
 */
- (void)zx_setImagePositionWithTypeV2:(CAIButtonImagePlacement)type spacing:(CGFloat)spacing;


#pragma mark -扩展方法设置

/**
 设置button 两行不同字体／颜色的富文本显示的文字；
 要求：文字不能太多，不然会出现多行显示不下的问题；

 使用例子：
 NSAttributedString *line1Att = [[NSAttributedString alloc] initWithString:@"文本title" attributes:@{NSForegroundColorAttributeName:UIColorFromRGB_HexValue(0x666666),
 NSFontAttributeName:[UIFont systemFontOfSize:16]}];
 NSAttributedString *line2Att = [[NSAttributedString alloc] initWithString:@"(副title)" attributes:@{NSForegroundColorAttributeName:UIColorFromRGB_HexValue(0x666666),
 NSFontAttributeName:[UIFont systemFontOfSize:12]}];
 [self.toPrivacyBtn zx_setTowOfLinesStringWithLineSpace:8.f firstLineWithAttributedTitle:line1Att secondLineWithAttributedTitle:line2Att];
 
 @param space 2行文字之间的行间距
 @param attributedTitle 富文本title,不能为空；
 @param attributedSubTitle 富文本子标题；
 */
- (void)zx_setTowOfLinesStringWithLineSpace:(CGFloat)space
               firstLineWithAttributedTitle:(nullable NSAttributedString *)attributedTitle
              secondLineWithAttributedTitle:(nullable NSAttributedString *)attributedSubTitle;



- (void)zx_setButtonImageViewScaleAspectFill;


#pragma mark -enable和disable的设置

/// 设置按钮 在 禁止交互状态 与 原始状态的titleColor；
- (void)zx_setEnabledTitleColor:(UIColor *)color1 disableTitleColor:(UIColor *)color2;


- (void)zx_setEnabledTitle:(NSString *)title1 disableTitle:(NSString *)title2;


#pragma mark -选择和非选择的设置；

/// 设置button按钮选中 和非选中的图片
/// @param image1 非选中图片
/// @param image2 已选中图片
- (void)zx_setSelectedWithImage:(UIImage *)image1 selectedImage:(UIImage *)image2;



- (void)zx_setSelectedWithTitleColor:(UIColor *)color1 selectedTitleColor:(UIColor *)color2;


- (void)zx_setSelectedWithAttributedTitle:(nullable NSAttributedString *)title
                  selectedAttributedTitle:(nullable NSAttributedString *)title2;



@end

NS_ASSUME_NONNULL_END
